﻿using Avalonia;
using Avalonia.Media;
using System;
using System.Drawing.Text;
using System.Linq;
using System.Runtime.InteropServices;

namespace CalculatorApp;

class Program
{
    [STAThread]
    public static void Main(string[] args) => BuildAvaloniaApp()
                .StartWithClassicDesktopLifetime(args);

    // BuildAvaloniaApp 是应用程序的启动方法，负责配置并启动 Avalonia 应用程序。
    public static AppBuilder BuildAvaloniaApp()
    {
        // 初始化默认的字体名称为空字符串
        string defaultFont = "";

        // 检查当前操作系统是否是 Linux 系统
        if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
        {
            // 获取当前操作系统的描述信息，通常包含操作系统的名称和版本
            string osDescription = RuntimeInformation.OSDescription.ToLower();
            Console.WriteLine("osDescription: " + osDescription);

            // 检查操作系统描述是否包含 "uniontech"，如果是，表示是 UOS 系统
            if (osDescription.Contains("uniontech"))
            {
                // 设置默认字体为 "Noto Sans"（这是 UOS 系统中常见的字体）
                defaultFont = "Noto Sans";
            }
            // 检查操作系统描述是否包含 "kylin"，如果是，表示是麒麟 v10 系统
            else if (osDescription.Contains("kylin"))
            {
                // 设置默认字体为 "Arial"（麒麟系统中常用的字体）
                defaultFont = "Arial";
            }
            // 检查操作系统描述是否包含 "ubuntu"，如果是，表示是 Ubuntu 系统
            else if (osDescription.Contains("ubuntu"))
            {
                // 设置默认字体为 "Noto Mono"（Ubuntu 中常用的等宽字体）
                defaultFont = "Noto Mono";
            }
        }

        // 创建 FontManagerOptions 对象，并设置默认的字体名称
        FontManagerOptions options = new FontManagerOptions
        {
            DefaultFamilyName = defaultFont // 通过操作系统检测结果设置的默认字体
        };

        // 输出当前使用的字体信息到控制台，以便调试和验证
        Console.WriteLine("Using font: " + options.DefaultFamilyName);

        // 返回一个 AppBuilder 实例，配置并启动 Avalonia 应用程序
        return AppBuilder.Configure<App>()      // 配置应用程序
            .UsePlatformDetect()                // 自动检测运行平台（Windows, Linux, macOS）
            .WithInterFont()                    // 配置默认字体为 InterFont，作为默认字体集
            .LogToTrace()                       // 允许日志信息输出到控制台，方便调试
            .With(options);                     // 应用字体选项
    }
}
